home *** CD-ROM | disk | FTP | other *** search
Text File | 1985-08-20 | 11.5 KB | 483 lines | [TEXT/Anon] |
- SUBS SUBTTL SHELL/EDITOR SUBROUTINES.
- DSH8 SPACE 4,10
- ** DSH8 - DISPLAY 8-BIT HEX NUMBER TO CONSOLE.
- *
- * ENTRY D2.B = 8-BIT HEX NUMBER.
-
- DSH8 MOVE D2,D1
- AND #$00F0,D1 ;LEFT NIBBLE
- LSR #4,D1
- MOVE.B DSH8A(PC,D1),D0 ;HEX CHARACTER
- JSR IOWCH(PC)
- MOVEQ #$0F,D0
- AND D2,D0 ;RIGHT NIBBLE
- MOVE.B DSH8A(PC,D0),D0
- JSR IOWCH(PC)
- RTS
-
- DSH8A DC.B #H'0123456789ABCDEF'
- DSH16 SPACE 4,10
- ** DSH16 - DISPLAY HEX WORD.
- *
- * ENTRY D6 = 16-BIT HEX VALUE.
-
- DSH16 MOVE D6,D2
- LSR #8,D2
- BSR DSH8 ;DISPLAY UPPER 8 BITS
- MOVE.B D6,D2
- BSR DSH8
- RTS
- GETF SPACE 4,10
- ** GETF - USE SFGETFILE TO SELECT A FILE.
- *
- * EXIT CCR - 0 IF NO VALID FILE NAME SELECTED.
-
- GETF MOVE.L GETFA(PC),-(SP) ;WHERE TO PLACE INQUIRY BOX
- PEA GETFB(PC) ;TITLE
- CLR.L -(SP) ;NO FILE FILTERING
- MOVE #1,-(SP) ;DISPLAY ONLY TEXT FILES
- PEA GETFC(PC)
- CLR.L -(SP)
- PEA SFREPLY(A6)
- MOVE #2,-(SP) ;SFGETFILE
- _Pack3
- TST.B SFGOOD(A6)
- BEQ.S GETFX ;IF NO FILE SELECTED
- MOVE.L EDITF(A6),A1
- LEA SFNAME(A6),A4 ;FILE NAME SELECTED
- CLR D0
- MOVE.B (A4)+,D0
- CLR.B 0(A4,D0) ;SET TRAILING ZERO BYTE
- MOVE.B (A4)+,D0
- BSR VALF ;SET UP FIT
- BEQ.S GETFX ;IF INVALID NAME
- MOVE SFVREFN(A6),FFPB+ioVRefNum(A1) ;SET VOLUME NUMBER
- MOVEQ #1,D1
- GETFX RTS
-
- GETFA DC 40,40 ;UPPER LEFT POINT OF DIALOG BOX
- GETFB STR 'Select an Edit File'
- GETFC DC #'TEXT'
- GETS SPACE 4,10
- ** GETS - USE SFPUTFILE TO SELECT A FILE.
- *
- * EXIT CCR - 0 IF NO VALID FILE NAME SELECTED.
-
- GETS MOVE.L GETFA(PC),-(SP) ;WHERE TO PLACE INQUIRY BOX
- PEA GETSB(PC) ;TITLE
- MOVE.L EDITF(A6),A1
- MOVE.L FFPB+ioFileName(A1),-(SP) ;FILE NAME
- CLR.L -(SP) ;NO DIALOG HOOK
- PEA SFREPLY(A6)
- MOVE #1,-(SP) ;SFPUTFILE
- _Pack3
- TST.B SFGOOD(A6)
- BEQ.S GETSX ;IF NO FILE SELECTED
- MOVE.L EDITT(A6),A1
- LEA SFNAME(A6),A4 ;FILE NAME SELECTED
- CLR D0
- MOVE.B (A4)+,D0
- CLR.B 0(A4,D0) ;SET TRAILING ZERO BYTE
- MOVE.B (A4)+,D0
- BSR VALF ;SET UP FIT
- BEQ.S GETSX ;IF INVALID NAME
- MOVE SFVREFN(A6),FFPB+ioVRefNum(A1) ;SET VOLUME NUMBER
- MOVEQ #1,D1
- GETSX RTS
-
- GETSB STR 'Select a Save File Name'
- IFEM SPACE 4,10
- ** IFEM - ISSUE FILE ERROR MESSAGE.
- *
- * ENTRY A1 - FIT.
- * A3 - ERROR MESSAGE.
-
- IFEM BSR.S IFN ;BUILD ERROR MESSAGE
- BSR WZL ;ISSUE MESSAGE
- JSR IOWCR(PC)
- RTS
- IFN SPACE 4,10
- ** IFN - INSERT FILE NAME.
- *
- * ENTRY A1 - FIT.
- * A4 - DESTINATION BUFFER ADDRESS.
-
- IFN LEA SCRS(A6),A4
- IFN1 MOVE.B (A3)+,(A4)+ ;TRANSFER MESSAGE
- BNE IFN1
- SUBQ.L #1,A4
- MOVEQ #8-1,D7
- MOVEQ #' ',D6
- LEA FSTR(A1),A0 ;FILE NAME
- MOVE.B (A0)+,D7 ;LENGTH
- SUBQ #1,D7
- BLT.S IFNX
- IFN2 MOVE.B (A0)+,(A4)+ ;TRANSFER NAME
- DBF D7,IFN2
- IFNX CLR.B (A4)+
- LEA SCRS(A6),A3
- RTS
- IFE SPACE 4,10
- ** IFE - INSERT FILE ERROR CODE.
-
- IFE LEA IFEA(PC),A3
- SUBQ #1,A4
- IFE1 MOVE.B (A3)+,(A4)+ ;TRANSFER *ERR - *
- BNE IFE1
- SUBQ #1,A4
- MOVE D0,D1
- BPL.S IFE2 ;IF POSITIVE CODE
- MOVE.B #'-',(A4)+
- NEG D1
- NEG D0
- IFE2 AND #$00F0,D1
- LSR #4,D1
- MOVE.B IFEB(PC,D1),(A4)+
- AND #$000F,D0
- MOVE.B IFEB(PC,D0),(A4)+
- CLR.B (A4)
- LEA SCRS(A6),A3
- RTS
-
- IFEA DC.L #Z' ERR# '
- IFEB DC.B #H'0123456789ABCDEF'
- OBF SPACE 4,10
- ** OBF - OPEN FILE.
- *
- * ENTRY A1 - FIT.
- *
- * EXIT CCR - .EQ. IF FILE OPEN.
-
- OBFW MOVEQ #2,D0 ;WRITE ACCESS
- BRA.S OBF1
- OBF MOVEQ #3,D0 ;READ ACCESS
- OBF1 JSR IOOPEN(PC)
- BEQ.S OBFX ;IF OPEN
- MOVE D0,D5
- LEA EMOPN(PC),A3 ;*UNABLE TO OPEN*
- BSR IFEM
- MOVE D5,D0
- OBFX RTS
- OBFR SPACE 4,10
- ** OBFR - OPEN FILE RESOURCE FORK.
- *
- * ENTRY A1 - FIT.
- *
- * EXIT CCR - .EQ. IF FILE OPEN.
-
- OBFRW MOVEQ #2,D0 ;WRITE ACCESS
- BRA.S OBFR1
- OBFR MOVEQ #3,D0 ;READ ACCESS
- OBFR1 JSR IOOPENR(PC)
- BEQ.S OBFRX ;IF OPEN
- LEA EMOPN(PC),A3 ;*UNABLE TO OPEN*
- BSR IFEM
- MOVEQ #1,D0
- OBFRX RTS
- RETURN SPACE 4,10
- * RETURN - RELEASE RESOURCES AND END PROGRAM.
-
- RETURN MOVE.L EDTE(A6),-(SP) ;RELEASE TE RESOURCES
- _TEDispose
- MOVE.L EDWN(A6),-(SP)
- _KillControls
- MOVE.L EDWN(A6),-(SP) ;RELEASE WINDOW
- _CloseWindow
-
- RMENU MOVEQ #6+1,D7 ;CLEAR MENU BAR
- RMEN1 SUBQ #1,D7
- BEQ.S RMENUX ;IF ALL COLUMNS PROCESSED
- CLR.L -(SP)
- MOVE D7,-(SP)
- _GetMHandle ;GET MENU COLUMN HANDLE
- MOVE.L (SP)+,D3
- BEQ RMEN1 ;IF COLUMN NOT ACTIVE
- MOVE.L D3,-(SP)
- MOVE D7,-(SP)
- _DeleteMenu ;RELEASE RESOURCES
- _DisposMenu
- BRA RMEN1
- RMENUX _DrawMenuBar ;DRAW CLEARED BAR
- _InitCursor
- RTS
- RWB SPACE 4,10
- ** RWB - RUN WARNING BOX.
- *
-
- RWB LEA PRMP+14(PC),A2 ;INSERT PROMPT
- MOVEQ #-1,D0
- MOVE.L A2,A4
- RWB1 ADDQ #1,D0
- MOVE.B (A3)+,(A4)+ ;TRANSFER PROMPT MESSAGE
- BNE RWB1
- LEA PRMP+13(PC),A2
- MOVE.B D0,(A2)
- LEA RWBC(PC),A4 ;DIALOG LIST
- MOVE.L A4,-(A4) ;PTR
- MOVE.L A4,-(A4) ;HANDLE
- CLR.L -(SP)
- PEA ALRTB(A6) ;ALERT BOX RECORD
- PEA RWBA(PC) ;BOX BOUNDS
- CLR.L -(SP) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- MOVE #1,-(SP) ;MODAL DIALOG BOX
- MOVE.L #-1,-(SP) ;ON TOP
- MOVE.B #0,-(SP) ;NO GO AWAY BOX
- CLR.L -(SP)
- MOVE.L RWBB(PC),-(SP)
- _NewDialog ;CREATE DIALOG WINDOW
- MOVE.L (SP)+,DLWN(A6)
-
- * ADD CONTROL BOXES.
-
- CLR.L -(SP)
- MOVE.L DLWN(A6),-(SP) ;DIALOG WINDOW
- PEA WOKB+L(PC) ;RECT
- PEA OK(PC) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- CLR -(SP) ;VALUE
- CLR -(SP) ;MIN
- CLR -(SP)
- MOVE #0,-(SP) ;SIMPLE PUSH BUTTON
- CLR.L -(SP)
- _NewControl
- LEA WOKB(PC),A2 ;CONTROL HANDLE
- MOVE.L (SP)+,(A2)
-
- * RUN WARNING BOX.
-
- LEA ITEMHIT(A6),A3
- RWB2 CLR.L -(SP) ;NO FILTER
- MOVE.L A3,-(SP)
- _ModalDialog
- MOVE (A3),D0 ;ITEM SELECTED
- BLE RWB2
-
- * CLEAN UP.
-
- MOVE.L DLWN(A6),-(SP)
- _KillControls ;RELEASE DIALOG CONTROLS
- MOVE.L DLWN(A6),-(SP)
- _CloseDialog ;RELEASE DIALOG STRUCTURES
- RTS
-
- RWBA DC 40,100,100,400
- RWBB DS.L 1 ;HANDLE
- DS.L 1 ;PTR
- RWBC DC 2-1 ;NUMBER OF ITEMS
- WOKB DC.L 0 ;OK BUTTON
- DC 35,200,53,260
- DC.B 4
- DC.B 0
- PRMP DC.L 0 ;PROMPT
- DC 05,20,23,290
- DC.B 8
- DC.B 0
- DS.B 50 ;PROMPT TEXT
- OK STR 'OK'
- RYN SPACE 4,10
- ** RYN - RUN YES/NO BOX.
- *
- * ENTRY A3 - PROMPT.
- *
- * EXIT CCR - 0 IF *CANCEL* SELECTED.
-
- RYN LEA YNPR+14(PC),A2 ;INSERT PROMPT
- MOVEQ #-1,D0
- MOVE.L A2,A4
- RYN1 ADDQ #1,D0
- MOVE.B (A3)+,(A4)+ ;TRANSFER PROMPT MESSAGE
- BNE RYN1
- LEA YNPR+13(PC),A2
- MOVE.B D0,(A2)
- LEA RYNC(PC),A4 ;DIALOG LIST
- MOVE.L A4,-(A4) ;PTR
- MOVE.L A4,-(A4) ;HANDLE
- CLR.L -(SP)
- PEA ALRTB(A6) ;ALERT BOX RECORD
- PEA RWBA(PC) ;BOX BOUNDS
- CLR.L -(SP) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- MOVE #1,-(SP) ;MODAL DIALOG BOX
- MOVE.L #-1,-(SP) ;ON TOP
- MOVE.B #0,-(SP) ;NO GO AWAY BOX
- CLR.L -(SP)
- MOVE.L RYNB(PC),-(SP)
- _NewDialog ;CREATE DIALOG WINDOW
- MOVE.L (SP)+,DLWN(A6)
-
- * ADD CONTROL BOXES.
-
- CLR.L -(SP)
- MOVE.L DLWN(A6),-(SP) ;DIALOG WINDOW
- PEA YNOK+L(PC) ;RECT
- PEA OK(PC) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- CLR -(SP) ;VALUE
- CLR -(SP) ;MIN
- CLR -(SP)
- MOVE #0,-(SP) ;SIMPLE PUSH BUTTON
- CLR.L -(SP)
- _NewControl
- LEA YNOK(PC),A2 ;CONTROL HANDLE
- MOVE.L (SP)+,(A2)
-
- CLR.L -(SP)
- MOVE.L DLWN(A6),-(SP) ;DIALOG WINDOW
- PEA YNCN+L(PC) ;RECT
- PEA CANCEL(PC) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- CLR -(SP) ;VALUE
- CLR -(SP) ;MIN
- CLR -(SP)
- MOVE #0,-(SP) ;SIMPLE PUSH BUTTON
- CLR.L -(SP)
- _NewControl
- LEA YNCN(PC),A2 ;CONTROL HANDLE
- MOVE.L (SP)+,(A2)
-
- * RUN WARNING BOX.
-
- LEA ITEMHIT(A6),A3
- RYN2 CLR.L -(SP) ;NO FILTER
- MOVE.L A3,-(SP)
- _ModalDialog
- MOVE (A3),D7 ;ITEM SELECTED
- BLE RYN2
-
- * CLEAN UP.
-
- MOVE.L DLWN(A6),-(SP)
- _KillControls ;RELEASE DIALOG CONTROLS
- MOVE.L DLWN(A6),-(SP)
- _CloseDialog ;RELEASE DIALOG STRUCTURES
- SUB #2,D7 ;TEST FOR CANCEL
- RTS
-
- RYNB DS.L 1 ;HANDLE
- DS.L 1 ;PTR
- RYNC DC 3-1 ;NUMBER OF ITEMS
- YNOK DC.L 0 ;OK BUTTON
- DC 35,200,53,260
- DC.B 4
- DC.B 0
- YNCN DC.L 0 ;CANCEL BUTTON
- DC 35,120,53,180
- DC.B 4
- DC.B 0
- YNPR DC.L 0 ;PROMPT
- DC 05,20,23,290
- DC.B 8
- DC.B 0
- DS.B 50 ;PROMPT TEXT
- VALF SPACE 4,10
- ** VALF - VALIDATE FILE NAME.
- *
- * ENTRY A1 - FIT.
- * A4 - FILE NAME.
- * D0 - FIRST CHARACTER OF FILE NAME.
- *
- * EXIT CCR - .EQ. IF NAME OK.
- * .GT. IF ERROR IN FILE NAME.
- * .LT. IF ERROR IN DRIVE NAME.
-
- VALF MOVE.B D0,D4
- LEA BLANKS(PC),A3 ;INITIALIZE FIT NAME WITH BLANKS
- JSR IOSFN(PC)
- LEA SCRS(A6),A0
- MOVE.L (A3),(A0) ;INITIALIZE ACCUMULATION AREA
- MOVE.L (A3),L(A0)
- MOVE.L D5,D(A0)
- CLR.L D0
- MOVE.B D4,D0
- MOVEQ #8,D7
- MOVEQ #' ',D6
- VALF1 CMP.B #'.',D0
- BEQ.S VALF4 ;IF POSSIBLE EXTENSION
- CMP.B D6,D0
- BEQ.S VALF8 ;IF END OF NAME
- SUBQ #1,D7
- BLT VALF9 ;IF NAME TOO LONG
- CMP.B #'a',D0
- BMI.S VALF2 ;IF UPPER CASE
- SUB.B #'a'-'A',D0
- VALF2 CMP D6,D0
- BMI.S VALF9 ;IF CONTROL CHARACTER
- CMP.B #'1',D0
- BGE.S VALF3 ;IF ALPHANUMERIC
- CMP.B #'.',D0
- BEQ VALF8 ;IF END OF NAME
- VALF3 CMP.B #'Z',D0
- BGT.S VALF9
- MOVE.B D0,(A0)+ ;COLLECT NAME
- MOVE.B (A4)+,D0
- BNE VALF1
- BRA.S VALF8 ;END OF NAME AND NO EXTENSION PRESENT
-
- * ASSEMBLE AND CHECK EXTENSION NAME.
-
- VALF4 SUBQ #8,D7
- BEQ.S VALF9 ;IF NO FILE NAME
- LEA SCRS+D+1(A6),A3
- MOVE.L BLANKS(PC),-1(A3)
- MOVE.L A3,A0
- MOVEQ #3,D7
- VALF5 MOVE.B (A4)+,D0
- BEQ.S VALF8 ;IF END OF EXTENSION
- CMP.B D6,D0
- BEQ.S VALF6
- SUBQ #1,D7
- BLT.S VALF9 ;IF NAME TOO LONG
- CMP.B #'a',D0
- BMI.S VALF6 ;IF UPPER CASE
- SUB.B #'a'-'A',D0
- VALF6 CMP.B D6,D0
- BMI.S VALF9 ;IF CONTROL CHARACTER
- CMP.B #'1',D0
- BGE.S VALF7
- NOP
- VALF7 CMP.B #'Z',D0
- BGT.S VALF9
- MOVE.B D0,(A0)+ ;COLLECT EXTENSION NAME
- BRA VALF5
-
- * SET FILE NAME INTO FIT.
-
- VALF8 LEA SCRS(A6),A3 ;FILE NAME
- MOVE.L SCRS+D(A6),D5 ;EXTENSION
- JSR IOSFN(PC) ;SET INTO FIT
- MOVEQ #1,D0
- RTS
-
- * ERROR IN FILE NAME.
-
- VALF9 LEA EMFLN(PC),A3 ;*INVALID FILE NAME*
- BSR IFEM
- CLR D0
- RTS
- WSTR SPACE 4,10
- ** WSTR - WRITE STRING.
- *
- * ENTRY A4 - STRING POINTER.
-
- WSTR MOVE.B (A4)+,D7 ;STRING LENGTH
- BEQ.S WSTRX ;IF NULL
- CLR D0
- WSTR1 MOVE.B (A4)+,D0 ;GET NEXT CHARACTER
- JSR IOWCH(PC) ;WRITE TO SCREEN
- SUBQ.B #1,D7
- BNE WSTR1 ;IF NOT AT END OF STRING
- WSTRX RTS
- WZL SPACE 4,10
- ** WZL - WRITE ZERO BYTE TERMINATED STRING.
- *
- * ENTRY A3 - ZERO BYTE TERMINATED STRING.
-
- WZL MOVE.B (A3)+,D0
- BEQ.S WZL1 ;IF END OF STRING
- JSR IOWCH(PC)
- BRA WZL
- WZL1 RTS
-
- * END OF CYCLAN SUBROUTINES.